<?php


/**
 * 腾讯云点播视频
 *
 * 文档： https://cloud.tencent.com/document/product/266/7788
 */
class QcloudService
{
    private static $appid;
    private static $secretId;
    private static $secretKey;
    private static $method = 'POST'; // 默认请求方法

    /**
     *  数据初始化
     */
    public static function config()
    {
        self::$appid = '1252046172';
        self::$secretId = 'AKIDWsAF6ioNL3dx2smnspY4LM9h15vVLvmQ';
        self::$secretKey = 'Yszta1C7pHTP6XieKlxta9TYOzMTRAgx';
    }

    /*
    * 公共参数
    */
    public static function common($input, $code = 0)
    {
        self::config();

        $input['Timestamp'] = time();
        $input['Nonce'] = uniqid();
        $input['SecretId'] = self::$secretId;
        $input['SignatureMethod'] = 'HmacSHA1'; // HmacSHA256

        ksort($input);

        $param_str = self::$method . 'vod.api.qcloud.com/v2/index.php?';
        foreach ($input as $key => $value) {
            /*拼接签名原文时，如果参数名称中携带_，需要替换成.*/
            if (strpos($key, '_')) {
                $key = str_replace('_', '.', $key);
            }
            $param_str .= $key . '=' . $value . '&';
        }
        $param_str = rtrim($param_str, '&');

        $input['Signature'] = base64_encode(hash_hmac('sha1', $param_str, self::$secretKey, true)); // sha256

        return $input;
    }

    /**
     * 数据发送
     */
    public static function send($data = [], $code = 0)
    {
        $result = send($data, $code);

        $array = Json::decode($result, true);
        if (!isset($array['code']) || $array['code'] != 0) {
            p('腾讯视频获取数据失败');
            p($data);
            pp($array);
        }

        return $array;
    }

    /**
     * 获取视频信息
     * 官方文档： https://cloud.tencent.com/document/product/266/8586
     * @param string $fileId 视频id
     * @param array $infoFilter 指定需要返回的信息，可同时指定多个信息，默认返回所有信息
     * basicInfo（视频基础信息）
     * metaData（视频元信息）
     * drm（视频加密信息）
     * transcodeInfo（视频转码结果信息）
     * animatedGraphicsInfo（视频转动图结果信息）
     * imageSpriteInfo（视频雪碧图信息）
     * snapshotByTimeOffsetInfo（视频指定时间点截图信息）
     * sampleSnapshotInfo（采样截图信息）
     * keyFrameDescInfo（打点信息）
     *
     * @return array 视频信息
     */
    public static function GetVideoInfo($fileId, $infoFilter = [])
    {
        $input['Action'] = 'GetVideoInfo';
        $input['fileId'] = $fileId;
        foreach ($infoFilter as $key => $value) {
            $input['infoFilter.' . $key] = $value;
        }
        $input = self::common($input);

        return self::send([
            'url' => 'https://vod.api.qcloud.com/v2/index.php',
            'method' => 'POST',
            'data' => $input
        ]);
    }
    
}
  